package com.ajx.blog.service.api;

import java.util.Map;

import com.ajx.blog.entity.Blogusers;
import com.ajx.blog.entity.CourseInfo;
import com.baomidou.mybatisplus.extension.service.IService;
import com.github.pagehelper.PageInfo;

public interface CourseInfoService extends IService<CourseInfo> {

    /**
     * @param {CourseInfo} courseInfo 待添加课程
     * @return {boolean} 是否添加成功 true/false
     * 
     * @description: 添加一门课程信息
     */
    boolean insertOneCourse(CourseInfo courseInfo);

    /**
     * @param {CourseInfo} courseInfo 待更新课程
     * @return {boolean} 是否更新成功 true/false
     * 
     * @description: 更新一门课程信息
     */
    boolean updateOneCourse(CourseInfo courseInfo);

    /**
     * @param {Integer} page 当前页码数
     * @return {PageInfo<CourseInfo>} 封装的分页信息对象
     * 
     * @description: 分页查询课程列表
     */
    PageInfo<CourseInfo> selectCourseList(Integer page);

    /**
     * @param {Integer} pageNum 当前页码数
     * @param {Integer} pageSize 每页记录数量
     * @return {PageInfo<CourseInfo>} 封装的分页信息对象
     * 
     * @description: 分页查询课程列表
     */
    PageInfo<CourseInfo> selectCourseList(Integer pageNum, Integer pageSize);

    /**
     * @param {Integer} pageNum 当前页码数
     * @param {Integer} pageSize 每页记录数量
     * @param {String}  sortBy 排序字段
     * @param {String}  ordBy 正序/倒序
     * @return {PageInfo<CourseInfo>} 封装的分页信息对象
     * 
     * @description: 分页查询课程列表
     */
    PageInfo<CourseInfo> selectCourseListByOrder(Integer pageNum, Integer pageSize, String sortBy, String ordBy);

    /**
     * @param {Integer} cid 课程id
     * @return {CourseInfo} 课程id对应的课程对象
     * 
     * @description: 根据课程id查询课程
     */
    CourseInfo selectCourseById(Integer cid);

    /**
     * @param {Integer} courseId 课程编号
     * @param {Integer} page 当前页码数
     * @return {PageInfo<Blogusers>} 封装的分页数据集合
     * 
     * @description: 通过分页数据和当前页码数查询选了此门课程的用户集合
     */
    PageInfo<Blogusers> selectUserListByCourseId(Integer courseId, Integer page);

    /**
     * @param {String} timeStr 时间范围 thisMonth代表本月
     * @return {Map<String,Integer>} 课程名与课程收益对应的map集合
     * 
     * @description: 查询课程的收益
     */
    Map<String, Integer> courseEarningsMap(String timeStr);

    /**
     * @param {*}
     * @return {Integer} 所有课程数量
     * 
     * @description: 查询所有课程数量
     */
    Integer selectCourseCount();

}
